package net.servir.capacidades.service.ws.impl;

//import java.rmi.RemoteException;
import java.util.List;

import net.servir.capacidades.model.Persona;
import net.servir.capacidades.service.ws.SRELServiceWS;
//import net.servir.capacidades.util.Retorno;
/*
import org.apache.axis2.AxisFault;
import org.reniec.rel.SRELServiceServiceStub;
import org.reniec.rel.SRELServiceServiceStub.GetRegIdentConsolidada2;
import org.reniec.rel.SRELServiceServiceStub.GetRegIdentConsolidada2E;
import org.reniec.rel.SRELServiceServiceStub.GetRegIdentConsolidada2Response;
import org.reniec.rel.SRELServiceServiceStub.GetRegIdentConsolidada2ResponseE;
import org.reniec.rel.SRELServiceServiceStub.GetSession;
import org.reniec.rel.SRELServiceServiceStub.GetSessionE;
import org.reniec.rel.SRELServiceServiceStub.GetSessionResponse;
import org.reniec.rel.SRELServiceServiceStub.GetSessionResponseE;
*/
public class SRELServiceWSImpl implements SRELServiceWS {
 
	public String mensajeError;
	private String token="";
	private final String usuario = "SERVIRWS";
	private final String codigo = "MjA5NDA4Nzc=";
	private final String  codTxEmp = "RSC";
	private final String  dniUserEmp = "09399938";
	private org.reniec.rel.SRELServiceService service;
	private org.reniec.rel.SRELService port;
	/*
	public Retorno getRegIdentConsolidada2(String dni) {
		Retorno retorno = new Retorno();
		//String urlws = "http://ws.reniec.gob.pe/SRELServicePre/SRELServiceService?wsdl";
		String urlws = "http://ws.reniec.gob.pe/SRELService/SRELServiceService?wsdl";
		
		try {
			System.out.println("- Inicio - Invocando SRELServiceService.getRegIdentConsolidada2()");
			System.out.println("-  url ws ="+urlws);
			
			//Obteniendo el session
			String session =  this.getSession();
			//
			SRELServiceServiceStub ws = new SRELServiceServiceStub(urlws);
			GetRegIdentConsolidada2ResponseE  getRegIdentConsolidada2ResponseE = new GetRegIdentConsolidada2ResponseE();
			GetRegIdentConsolidada2E getRegIdentConsolidada2E = new GetRegIdentConsolidada2E();
			GetRegIdentConsolidada2 getRegIdentConsolidada2 = new GetRegIdentConsolidada2();
			getRegIdentConsolidada2.setSesion(session);
			getRegIdentConsolidada2.setUsuario("SERVIRWS");
			getRegIdentConsolidada2.setCodTxEmp("");
			getRegIdentConsolidada2.setDniUserEmp("09399938"); // 10422458
			getRegIdentConsolidada2.setDni(dni);// lo buscado 
			getRegIdentConsolidada2E.setGetRegIdentConsolidada2(getRegIdentConsolidada2);
			System.out.println("------------ parametros de entrada ---------------");
			System.out.println("getRegIdentConsolidada2.getSesion()= " + getRegIdentConsolidada2.getSesion());
			System.out.println("getRegIdentConsolidada2.getUsuario()= " + getRegIdentConsolidada2.getUsuario());
			System.out.println("getRegIdentConsolidada2.getCodTxEmp()= " + getRegIdentConsolidada2.getCodTxEmp());
			System.out.println("getRegIdentConsolidada2.getDniUserEmp()= " + getRegIdentConsolidada2.getDniUserEmp());
			System.out.println("getRegIdentConsolidada2.getDni()= " + getRegIdentConsolidada2.getDni());
			System.out.println("--------------------------------------------------");
			
			getRegIdentConsolidada2ResponseE  = ws.getRegIdentConsolidada2(getRegIdentConsolidada2E);
			GetRegIdentConsolidada2Response getRegIdentConsolidada2Response = getRegIdentConsolidada2ResponseE.getGetRegIdentConsolidada2Response();
			String[] returnArray =  getRegIdentConsolidada2Response.get_return();
			System.out.println("------------ parametros de entrada ---------------");
			for (int i=0;i<returnArray.length;i++){
				System.out.println("returnArray["+i+"]="+returnArray[i]);
				
			}
			System.out.println("--------------------------------------------------");
			retorno.setErrorCode("0");
			retorno.setObjeto(returnArray);
			
		} catch (AxisFault e) {
			// TODO Auto-generated catch block
			System.out.println("- Error - Invocando SRELServiceService.getRegIdentConsolidada2()");
			retorno.setErrorCode("100");
			e.printStackTrace();
		} catch (RemoteException e) {
			System.out.println("- Error - Invocando SRELServiceService.getRegIdentConsolidada2()");
			retorno.setErrorCode("100");
			e.printStackTrace();
		
		} 
		System.out.println("- Fin - Invocando SRELServiceService.getRegIdentConsolidada2()");
		return retorno;

	}
	
	private String getSession(){
		String session = "";
		//String urlws = "http://ws.reniec.gob.pe/SRELServicePre/SRELServiceService?wsdl";
		String urlws = "http://ws.reniec.gob.pe/SRELService/SRELServiceService?wsdl";
		try {
			System.out.println("- Inicio - Invocando SRELServiceService.getSession()");
			System.out.println("-  url ws ="+urlws);
			SRELServiceServiceStub ws = new SRELServiceServiceStub(urlws);
			GetSessionResponseE getSessionResponseE = new GetSessionResponseE();
			GetSessionE getSessionE = new GetSessionE();
			GetSession GetSession = new GetSession();
			GetSession.setUsuario("SERVIRWS"); // SERVIRWS
			GetSession.setCodigo("MjA5NDA4Nzc="); // MTkwMTSeR
			getSessionE.setGetSession(GetSession);
			System.out.println("------------ parametros de entrada ---------------");
			System.out.println("GetSession.getUsuario()= " + GetSession.getUsuario());
			System.out.println("GetSession.getCodigo()=  "+GetSession.getCodigo());
			System.out.println("--------------------------------------------------");
			getSessionResponseE  = ws.getSession(getSessionE);
			GetSessionResponse getSessionResponse = getSessionResponseE.getGetSessionResponse();
			System.out.println("------------ parametros de entrada ---------------");
			System.out.println("getSessionResponse.get_return()= "+getSessionResponse.get_return());
			System.out.println("--------------------------------------------------");
			session = getSessionResponse.get_return();
			
		} catch (AxisFault e) {
			System.out.println("- Error - Invocando SRELServiceService.getSession()");
			
			e.printStackTrace();
		} catch (RemoteException e) {
			System.out.println("- Error - Invocando SRELServiceService.getSession()");
			e.printStackTrace();
		} 
		System.out.println("- Fin - Invocando SRELServiceService.getSession()");
		return session;

		
	}
*/
	public Persona getPersona(String dni) {
		
		Persona persona = new Persona();
		
		//Retorno retorno = getRegIdentConsolidada2(dni);
		obtenerToken();
        if(validarToken()){
		List<String> retorno = port.getRegIdentConsolidada2(token, usuario, codTxEmp, dniUserEmp, dni);
		//0)  COD DE ERROR
		//<return>0000</return>
		//persona.setError(((String[])retorno.getObjeto())[0]);
		for (int i=0;i<retorno.size();i++){
			System.out.println("returnArray["+i+"]="+retorno.get(i));
		}
		
		persona.setError(retorno.get(0));
		if (persona.getError().equals("0000"))
		{
			
		//1)-- AP_PRIMER
        //<return>ACUnA</return>
		persona.setPrimer_apellido(retorno.get(1));

		//2)-- AP_SEGUNDO
        //<return>AYRE</return>
		persona.setSegundo_apellido(retorno.get(2));

		//3)  -- AP_CASADA
		//<return>DE GALARZA</return>
		persona.setCasada_apellido(retorno.get(3));
 		
		//4) -- PRENOM_INSCRITO
        //<return>MARLENE MARIBEL</return>
		persona.setNombre(retorno.get(4));
		
		//5) --- CODIGO DE UBIGEO DEPARTAMENTO DOMICILIO
        //<return>14</return>
		//6)--- CODIGO DE UBIGEO PROVINCIA DOMICILIO
        //<return>01</return>
		//7)--- CODIGO DE UBIGEO DISTRITO DOMICILIO
        //<return>24</return>
		persona.setCod_ubigeo(retorno.get(5)+retorno.get(6)+retorno.get(7));
		
		//8)--- DEPARTAMENTO DOMICILIO
        //<return>LIMA</return>
		persona.setDepartamento(retorno.get(8));
		//9)--- PROVINCIA DOMICILIO
        //<return>LIMA</return>
		persona.setProvincia(retorno.get(9));
		//10)--- DISTRITO DOMICILIO
        //<return>SAN ISIDRO</return>
		persona.setDistrito(retorno.get(10));
		
		//11)--- DIRECCION DOMICILIO
        //<return>DEL PARQUE NORTE 656 - 670 354 B3 etapa 1</return>
		persona.setDireccion(retorno.get(11));
		//12)--- ESTADO CIVIL
        //<return>1</return>
		persona.setEstado_civil(retorno.get(12));
		//13)-- DE_GENERO
        //<return>2</return>
		persona.setGenero(retorno.get(13));
		
		if (persona.getGenero().equals("1"))
		{
			persona.setSexo_texto("Masculino");
			persona.setSexo("M");
		}
		if (persona.getGenero().equals("2"))
		{
			persona.setSexo_texto("Femenino");
			persona.setSexo("F");
		}
		//14)-- TO_CHAR(FE_NACIMIENTO,'YYYYMMDD')
		//							   01234567
        //<return>19620123</return>
		String f_nacimiento = retorno.get(14);
		if (f_nacimiento.length() == 8)
			persona.setF_nacimiento(f_nacimiento.substring(6, 8) +"/" + f_nacimiento.substring(4, 6) +"/"+f_nacimiento.substring(0, 4));
		
		//15)--NOMBRE DEL PADRE
        //<return>LAUREANO</return>
		
		//16)--NOMBRE DE LA MADRE
        //<return>ANGELICA</return>
		
		//17)--FECHA DE FALLECIMIENTO
        //<return>20120207</return>
		String f_fallecimiento = retorno.get(17);
		if (f_fallecimiento.length() == 8)
			persona.setF_fallecimiento(f_fallecimiento.substring(6, 8) +"/" + f_fallecimiento.substring(4, 6) +"/"+f_fallecimiento.substring(0, 4));
		
		//18)--FECHA DE CADUCIDAD
        //<return>20120913</return>
		String f_caducidad = retorno.get(18);
		if (f_caducidad.length() == 8)
			persona.setF_caducidad(f_caducidad.substring(6, 8) +"/" + f_caducidad.substring(4, 6) +"/"+f_caducidad.substring(0, 4));
		
		//19)--COD RESTRICCION
        //<return>A</return>
		persona.setCod_restriccion(retorno.get(19));
		
		if (persona.getCod_restriccion().equals(" "))
			persona.setCod_restriccion("999");
			
		//20) -- NU_DNI
        //<return>08256265</return>
		persona.setDni(retorno.get(20));
		
        //<return>21</return>
        //<return>A</return>
		
		persona.setObtenido_reniec("1");
		
		
		}else
		{
			persona.setObtenido_reniec("0");
		}
        }
		return persona;
	}
	
	public Boolean validarToken()
	 {
	     System.out.println("estado del TOKEN : "+token);
	     
	  if (token==null||"".equals(token)) { mensajeError="Error no identificado"; return false; }    
	  if ("2".equals(token)) { mensajeError="Error en la operación"; return false; }
	  if ("3".equals(token)) { mensajeError="La Consulta esta fuera del Horario Permitido";return false; }
	  if ("4".equals(token)) { mensajeError="Usuario no valido";return false;  }
	  if ("5".equals(token)) { mensajeError="La Consulta excedió la cantidad máxima permitida";return false; } 
	  if ("6".equals(token)) { mensajeError="Usuario no existe";return false; }
	  
	  //OK
	 return true;
	 }
	
	public Boolean validarEstadoConsulta(String estado){

	    System.err.println("estado validar consulta: "+estado);
	    
	    if ("NTP".equals(estado)) { mensajeError="No tienen permisos de acceso al método consulta.";return false; } 
	    if ("SINV".equals(estado)) { mensajeError="Código de Sesión ingresado inválido.";return false; } 
	    if ("UNL".equals(estado)) { mensajeError="Aplicación que consulta a Web Service no se ha autenticado.";return false;} 
	    if ("5".equals(estado)) { mensajeError="Excedió el máximo número de consultas asignadas por día.";return false;} 
	    if ("3".equals(estado)) { mensajeError="Esta consultando en un día y hora no permitido según convenio.";return false;} 
	    if ("DNE".equals(estado)) { mensajeError="El DNI consultado es inválido.";return false;} 
	    if ("DNV".equals(estado)) { mensajeError="El DNI del usuario de la empresa es inválido. No está autorizado a consultar.";return false;} 
	    if ("0002".equals(estado)) { mensajeError="El Servidor no puede atender el requerimiento.";return false;}
	    //OK
	    if ("0000".equals(estado)) { return true;}

	    mensajeError = "Error no identificado";
	    return false;
	}
	
	public void obtenerToken(){
	    
	     service = new org.reniec.rel.SRELServiceService();
	     port = service.getSRELServicePort();
	     // Obtenemos el token para realizar la consulta
	     token = port.getSession(usuario, codigo);
	}

//	public List<String> obtenerResultado(String dni){
//
//	      System.err.println("dni : "+dni);
//	      
//	      List<String> result = port.getRegIdentConsolidada2(token, usuario, codTxEmp, dniUserEmp, dni);
//	  
//	        System.err.println("resultado : "+result.size());
//	        
//	    return result;
//	}
	
}
